package cn.tedu.charcount;

import java.io.IOException;

import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Mapper;

/**
 * 字符统计
 * @author waqwb
 * 我们做字符统计的mapper类，需要继承自Mapper
 * 传入四个泛型
 * KEYIN：输入的键的类型，默认情况下，键是行的字节的偏移量（相当于下标）
 * VALUEIN：输入的值的类型，默认情况下，就是一行的数据
 * KEYOUT：输出的键的类型，当前案例，是字符
 * VALUEOUT：输出的值的类型，当前案例是次数
 *
 */
public class CharCountMapper
		extends Mapper<LongWritable,Text,Text,LongWritable> {
	//计数
	public final LongWritable count = new LongWritable(1);
	//重写map函数
	/*
	 * 这里传递了三个参数
	 * key:对应的是KEYIN，表示偏移量
	 * value:对应的VALUEIN，表示要处理一行数据
	 * context:环境参数，利用这个参数，将Mapper的结果向Reducer传递
	 */
	@Override
	protected void map(LongWritable key, Text value,
					   Mapper<LongWritable, Text, Text, LongWritable>.Context context)
			throws IOException, InterruptedException {
		//假设：hello
		/*
		 * key='a'
		 * h-1 e-1 l-1 l-1 o-1
		 * h-1 e-1 l-2 o-1
		 */
		//把传入的要处理的一行数据，拆分成一个数组形式
		char[] cs = value.toString().toCharArray();
		//遍历数组
		for (char c : cs) {
			context.write(new Text(c+""),count );
		}
	}
}









